home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 10, No. 08 (1989-08)(MindCraft Publishing)(Side A).zip / Nibble Volume 10, No. 08 (1989-08)(MindCraft Publishing)(Side A).po / NUMCRUNCHER.S < prev    next >
Text File  |  1996-12-24  |  3KB  |  113 lines

  1. ******************************
  2. * NumberCruncher Source Code *
  3. * by Eric C. Mueller         *
  4. * Copyright(c) 1989          *
  5. * MindCraft Publ. Corp.      *
  6. * Concord, MA 01742          *
  7. * Merlin Assembler           *
  8. ******************************
  9.  
  10.           org $300
  11.  
  12. * equates
  13. cout      equ $fded
  14. phex      equ $fdda
  15. number    equ $6         ;& $7
  16. ch        equ $24
  17. chkcom    equ $debe      ;eat a comma from line
  18. frmevl    equ $dd7b      ;evaluate a formula (string)
  19. chkstr    equ $dd6c      ;verify that formula is a string
  20. linprnt   equ $ed24      ;print X & A as a 16-bit decimal number
  21. dptr      equ $a0        ;descriptor pointer
  22.  
  23. * jump table
  24. :0        jmp locate     ;--> clear register area
  25. :3        jmp prhex      ;--> print number in hex
  26. :6        jmp prbin      ;--> print number in binary
  27. :9        jmp fixerr     ;--> fix up stack after error
  28. :12       jmp instr      ;--> do INSTR$ function
  29.  
  30. * subroutines
  31. locate    lda $6
  32.           jsr $fb5b      ;vtab peek(6)
  33.           lda #2
  34.           sta ch
  35.           ldy #17
  36. locate1   lda #$a0
  37.           jsr cout
  38.           dey
  39.           bne locate1
  40.           rts
  41.  
  42. prhex     lda #14
  43.           sta ch
  44.           lda #"$"
  45.           jsr cout
  46.           lda $7
  47.           jsr phex
  48.           lda $6
  49.           jmp phex
  50.  
  51. prbin     lda #2
  52.           sta ch
  53.           lda #"%"
  54.           jsr cout
  55.           lda $7
  56.           jsr prbin1
  57.           lda $6
  58. prbin1    ldx #7
  59. prbin2    rol            ;move a bit into carry
  60.           pha
  61.           lda #"0"       ;assume it's clear to start with
  62.           bcc prbin3
  63.           lda #"1"
  64. prbin3    jsr cout       ;print a single bit
  65.           pla
  66.           dex
  67.           bpl prbin2     ;print all eight bits
  68.           rts
  69.  
  70. fixerr    pla            ;right from the Applesloth manual
  71.           tay
  72.           pla
  73.           ldx $df
  74.           txs
  75.           pha
  76.           tya
  77.           pha
  78.           rts
  79.  
  80. instr     lda $6         ;first, convert key to uppercase
  81.           and #$7f       ;clear high bit
  82.           cmp #$e0-$80
  83.           blt :notlc     ;but don't, if it's not lowercase to start with
  84.           and #$df-$80
  85.           sta $6
  86. :notlc    jsr chkcom     ;eat comma
  87.           jsr frmevl     ;turn string into something useable
  88.           jsr chkstr     ;be sure it's a string
  89.           ldy #0
  90.           lda (dptr),Y   ;get length of string
  91.           sta length
  92.           iny
  93.           lda (dptr),Y   ;get low byte of address for string
  94.           pha
  95.           iny
  96.           lda (dptr),Y   ;get high byte
  97.           sta dptr+1     ;re-write DPTR!
  98.           pla
  99.           sta dptr
  100.           ldy #0         ;begin
  101. :1        lda (dptr),Y   ;get byte of string
  102.           cmp number     ;is it what we're after?
  103.           beq :gotit
  104.           iny
  105.           cpy length
  106.           bne :1
  107.           ldy #255
  108. :gotit    iny
  109.           sty number+1
  110.           rts
  111.  
  112. length    dfb 0
  113.